/*********************************
*-- 33 KDH Knieja ---------------*
*-- im. Harcerzy Września 1939 --*
*-- autor: Marcin Rzepisko ------*
*-- data: 2013-11-17 ------------*
**********************************/

package net.kdh.knieja.dao.klasy.filtry;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author rz.marcin@gmail.com
 */
public class FiltrArtykulowDAO implements FiltrDAO {
    private List<String> idArtykulow;
    private List<String> tytuly;
    private List<String> autorzy;
    private Timestamp dataUtworzeniaOd;
    private Timestamp dataUtworzeniaDo;

    public FiltrArtykulowDAO() {
        this.idArtykulow = new ArrayList<>(0);
        this.tytuly = new ArrayList<>(0);
        this.autorzy = new ArrayList<>(0);
    }
    
    /**
     * 
     * {@inheritDoc }
     */
    @Override
    public String generujWarunkiSQL() {
        ArrayList<String> listaWarunkow = new ArrayList<>(0);
        StringBuilder warunki = new StringBuilder();
        String warunekAtrybutu;
        String schemat;
        
        idArtykulow.remove("");
        tytuly.remove("");
        autorzy.remove("");
        
        if(!idArtykulow.isEmpty()) {
            warunekAtrybutu = "(";
            schemat = "id_artykulu = :id_artykulu OR ";
            for(String id : idArtykulow) {
                warunekAtrybutu += schemat.replace(":id_artykulu", id);
            }
            warunekAtrybutu += "1=0)";
            listaWarunkow.add(warunekAtrybutu);
        }
        
        if(!tytuly.isEmpty()) {
           warunekAtrybutu = "(";
            schemat = "tytul LIKE '%:tytul%' OR ";
            for(String tytul : tytuly) {
                warunekAtrybutu += schemat.replace(":tytul", tytul);
            }
            warunekAtrybutu += "1=0)";
            listaWarunkow.add(warunekAtrybutu); 
        }
        
        if(!autorzy.isEmpty()) {
           warunekAtrybutu = "(";
            schemat = "id_autora = ':id_autora' OR ";
            for(String id : autorzy) {
                warunekAtrybutu += schemat.replace(":id_autora", id);
            }
            warunekAtrybutu += "1=0)";
            listaWarunkow.add(warunekAtrybutu); 
        }
        if(dataUtworzeniaOd != null) {
            schemat = "data_utworzenia > :dataUtworzenia";
            warunekAtrybutu = schemat.replace(":dataUtworzenia", dataUtworzeniaOd.toString());
            listaWarunkow.add(warunekAtrybutu); 
        }
        if(dataUtworzeniaDo != null) {
            schemat = "data_utworzenia < :dataUtworzenia";
            warunekAtrybutu = schemat.replace(":dataUtworzenia", dataUtworzeniaDo.toString());
            listaWarunkow.add(warunekAtrybutu); 
        }
        if(listaWarunkow.isEmpty()) {
            return "1=1";
        }
        for(String warunek : listaWarunkow) {
            warunki.append(warunek);
            warunki.append(" AND ");
        }
        warunki.append("1=1");
        
        return warunki.toString();
    }

    public List<String> getIdArtykulow() {
        return idArtykulow;
    }

    public void setIdArtykulow(List<String> idArtykulow) {
        this.idArtykulow = idArtykulow;
    }

    public List<String> getTytuly() {
        return tytuly;
    }

    public void setTytuly(List<String> tytuly) {
        this.tytuly = tytuly;
    }

    public List<String> getAutorzy() {
        return autorzy;
    }

    public void setAutorzy(List<String> autorzy) {
        this.autorzy = autorzy;
    }

    public Timestamp getDataUtworzeniaOd() {
        return dataUtworzeniaOd;
    }

    public void setDataUtworzeniaOd(Timestamp dataUtworzeniaOd) {
        this.dataUtworzeniaOd = dataUtworzeniaOd;
    }

    public Timestamp getDataUtworzeniaDo() {
        return dataUtworzeniaDo;
    }

    public void setDataUtworzeniaDo(Timestamp dataUtworzeniaDo) {
        this.dataUtworzeniaDo = dataUtworzeniaDo;
    }
}
